
26.10.2017, 10:55
|
Профессор
|
|
Регистрация: 10.10.2012
Сообщений: 201
|
|
Нужна консультация по отправки данных через ajax
Доброго дня! Подскажите пожалуйста, мне нужна консультация. Как отправлять данные с формы через ajax я знаю.
Вопрос в следующем. Сделал поисковый фильтр, пока порядка 15ти параметров, большая часть из них - это кнопки(button). Так вот поскольку не доводилось делать подобного фильтра не могу сообразить как правильно реализовать.
На данный момент проставил каждой кнопке свой id-шник, и при нажатии на любую кнопку, надо, чтобы менялись результаты поиска. Иными словами нажал я например на кнопку Баня->подгрузились бани, рядом нажал на кнопку из бруса/или бревна подгрузились бани из бруса или бревна. Т.е. при нажатии на любую кнопку запрос несколько меняется и происходит выборка из бд.
Но я не могу понять, при нажатии на любую кнопку я ведь должен отправить все данные, значения всех нажатых/выбранных элементов, чтобы по общему массиву переданных параметров выводились нужные результаты. Надеюсь, объяснил понятно, помогите разобраться как это правильно работает. Спасибо
|
|

26.10.2017, 11:06
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от espltd
|
при нажатии на любую кнопку я ведь должен отправить все данные, значения всех нажатых/выбранных элементов
|
Да. А проблема в чем?
PS. Вот только фильтр в котором выбор это только кнопки, это сомнительно, хотя если это параметры да/нет, то может быть.
Последний раз редактировалось laimas, 26.10.2017 в 12:38.
|
|

26.10.2017, 14:32
|
Профессор
|
|
Регистрация: 10.10.2012
Сообщений: 201
|
|
А что сомнительного, ну вот например подобный фильтр https://metrosphera.ru/realty/search...limit=20&json=[{%22label%22:%222%20%D0%BA%D0%BE%D0%BC%D0%BD.%22,% 22id%22:%22typeObjectRealty10%22,%22name%22:%22typ eObjectRealty%22,%22value%22:%223%22,%22tagset%22: true},{%22label%22:%222017%20%D0%B3.%22,%22id%22:% 222017y%22,%22name%22:%22deliveryTime%22,%22value% 22:%222017%22,%22tagset%22:true},{%22tagset%22:tru e,%22label%22:%221%20%D0%BA%D0%BE%D0%BC%D0%BD.%22, %22id%22:%22typeObjectRealty9%22,%22name%22:%22typ eObjectRealty%22,%22value%22:%222%22},{%22tagset%2 2:true,%22label%22:%222016%20%D0%B3.%22,%22id%22:% 222016y%22,%22name%22:%22deliveryTime%22,%22value% 22:%222016%22}]&polygon=[]
слева есть кнопки, выбор комнаты квартиры, и год например, и если вы нажимаете на эти кнопки, то у вас формально отправляется массив всех собранных воедино полей и далее запрос в базу, вот я и не понимаю как этот механизм правильно реализовать... Не понимаю как все параметры скопом отправить, неужели писать условие для каждоый кнопки, типа если выбрана 1-комнатная квартира и например 2015 год, то считать с помощью val() значения всех остальных полей и отправить на сервер, но ведь это бред вроде. Глупо ведь писать для каждоый кнопки условие. Вот чего я не понимаю, т.к. раньше не делал подобного. Объясните плиз
|
|

26.10.2017, 14:45
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от espltd
|
слева есть кнопки
|
Слева не только кнопки, но и списки, и поля ввода. Вы же описываете свой фильтр как исключительно набор кнопок, отсюда и сомнения. Трудно представить базу, в которой сущность описана только булевыми значениями, когда можно было бы использовать только кнопки.
Не смотрите что у кого как, типы полей вашей SQL таблицы будут определять элементы фильтра, что в основе обычная форма. А форму отправить, это просто нажать кнопку submit, сервер получит массив параметров, по которым как условие выборки и делается запрос в базу. Если ваш запрос асинхронный и используется jQuery, то достаточно сериализовать данные формы одним из методов: $(селектор формы, в обработчике submit, это this).serialize() или $(this).serializeArray().
Если асинхронный запрос при каждом изменении в фильтре, то можно использовать туже сериализацию, удаляя на сервере из полученного массива пустые значения. Или циклом пройти по элементам формы и взять только те, которые имеют значения.
Последний раз редактировалось laimas, 26.10.2017 в 14:48.
|
|

27.10.2017, 09:23
|
Профессор
|
|
Регистрация: 10.10.2012
Сообщений: 201
|
|
Ох, что-то я запутался, возможно я не много не верно истолковал задачу.
Смотрите, это больше относится к пошаговому фильтру. Т.е. Изначально у меня есть форма в которой есть 3 выпадающих поля-списка и рядом с ними кнопка Поиск, которая естественно является submit-ом и отправляет форму, после которых мне выпадают найденные результаты. После того, как результаты появились, у меня вылазит доп. фильтр, на котором есть поля с ценой с поиском по названию, и есть как раз таки кнопочки, так вот я хочу сделать, чтобы этот условно назовем "второстепенный" фильтр при нажатии на кнопки тут же мне обновлял результат Ajax-ом. Я вот что не понимаю. Когда уже у тебя есть отобранный список, а далее есть доп. параметры но без тега form. Просто поля в дивах сделал с id-шниками. Мысль такая, при нажатии на кнопку (не submit) считать значения всех остальных полей наверное и отправить аякс запрос... Или обязательно надо чтобы второстепенный фильтр он тоже был в тегах form? Или как ? Как один раз отыскать я понимаю, а как на основе уже отобранных, выведенных из бд результатов учесть все выбранные, заполненные поля и уже аяксом отбирать то что есть, как бы вторым шагом? Вот это и не понимаю, то ли это должно быть 2 формы, сперва одна отбирает а потом другая, но если вторая форма начинает отбирать то, что есть, то ведь надо еще учесть как-то уже отобранное из первой формы, да + второй. Блин, запутался
|
|

27.10.2017, 09:32
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну если пошаговая фильтрация, то первичный набор фильтра должен быть сохранен и передаваться наряду со вторичным, в противном случае вы не сможете выбрать в базе соответствующее.
Вот только "уже без form" сделать конечно можно, но зачем же лишний геморрой если элементы формы как нельзя лучше соответствуют данной задаче.
У вас асинхронные запросы, и образно опишем набор фильтра элементами:
A, B, C, D, E, F
Пользователь выбирает среди них B, D, F.
Сервер отвечает и показывается дополнительные элементы фильтра:
E, H, G
Пользователь в них выбирает H.
Клиент отправляет запрос состоящий из выбранных элементов первого набора (запросы асинхронные и состояние ранее выбранного не изменяется) плюс из второго.
Все должно быть в одной форме, и клиенту не придется проверять условия - просто выбрать все элементы из набора, которые выбрал пользователь.
Последний раз редактировалось laimas, 27.10.2017 в 09:41.
|
|

27.10.2017, 10:05
|
Профессор
|
|
Регистрация: 10.10.2012
Сообщений: 201
|
|
Т.е. предлагаете мне поисковый фильтр тоже засунуть в область формы - например в какой нибудь div в форме, который изначально скрыт и после найденных результатов его отображать а потом пользоваться данным фильтром в рамках единой формы? Как-то так? А то у меня разбито на части, поисковый фильтр не входит не в одну форму, а просто вылазит снизу под формой в диве после найденных результатов.
|
|

27.10.2017, 10:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от espltd
|
предлагаете мне поисковый фильтр тоже засунуть в область формы
|
А что значит "поисковый" и "не поисковый"? Собственно что бы вы не делали, это параметры запроса к базе, а у нее нет понятия "фильтр", есть параметры запроса согласно которым будет происходить выборка из нее.
Если первичный набор вашего фильтра это выборка по неким глобальным критериям, а вторичный набор, это поиск в первичной выборке, то по большому счету разделять ничего и не требуется. Вы в любом случае вынуждены будет отправлять серверу весь набор параметров запроса.
Другое дело, если бы первичный набор, это возврат клиенту найденных записей, а вторичный набор, это не запрос к серверу, а фильтрация среди полученного непосредственно на клиенте, то есть работа с DOM.
Иначе как ни крути, хоть на более шагов разбивай, все это единый набор и раскидывать его на кучу форм не имеет смысла. А уж как этим управлять (скрывать/показывать/очищать выбор), это частности. Если вторичный набор должен зависеть от первого, то не сложно его скрывать/очищать при изменении в первом наборе, а показывать после ответа сервера на первичный запрос.
|
|

27.10.2017, 11:34
|
Профессор
|
|
Регистрация: 10.10.2012
Сообщений: 201
|
|
Спасибо, вы мне помогли/ разжевали хоть по полочкам, а то запутался. Все сделал единой формой сейчас, просто второй набор парамтеров скрыл и когда приходят первые найденные результаты из первого набора, далее вылазит див со вторым набором, сейчас вот только не понятно, там, где у меня кнопки, получается, что мне сейчас при нажатии на любую кнопку из второго набора параметров надо отправить форму или считать значения у всех остальных полей?
|
|

27.10.2017, 11:47
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от espltd
|
мне сейчас при нажатии на любую кнопку из второго набора параметров надо отправить форму или считать значения у всех остальных полей?
|
Ну вы же запрашиваете сервер, причем это запрос к БД на сервере, а любой выбор в наборе фильтра, это параметры запроса к БД. Следовательно любой выбор в фильтре это запрос сервера. Когда он будет инициализирован - по изменению выбора в фильтре или по нажатию submit, это вам решать. Но то что запрос при вторичном выборе должен оправлять и выбранные позиции из первого набора фильтра, то это однозначно. Иначе же вы получите совсем не то, чего ожидаете.
|
|
|
|